Modern software is continuously developed and used in computers and other machines that critically affect the lives of people including software for automatic teller machines (ATMs), automobiles and the like. For these machines, the software must be both secure and also reliable. However, it is common for the end user to identify defects in software after the software has been released. Once defects are found in software, the software developer should fix the defects right away. In this regard, usually, the software developer fixes defects in its software by releasing “patches”.
In addition to defect detection and remediation, software also should be continuously improved to adapt the software to newly emerging functions and technologies. Therefore, many software developers, in order to satisfy increasing functional demands of the end user base, upgrade fielded software by releasing patches after the software has been released. Of note, patches may either be used to provide new functions or be used to provide improved functions.
During software development, the software developer often uses automatic test cases to test developed software. Automatic test cases are programs implemented with script and representing certain function in software, that can be executed by a corresponding automatic execution tool to identify success or failure of execution of pre-defined test cases and record information required for disclosing defect and debugging problems of software. Although software developers can find most of defects in software during software development stage through such automated testing and make improvements thereupon, there may remain defects undiscovered.
It has been noted that since different end users focus upon different aspects in software usage, defects in software can be found more easily through the use of the software by the end user. Therefore, collecting end user feedback is an important software debugging tool in that a software developer can determine defects in software by collecting feedback to problems encountered during software usage from different users, so as to further develop patches for fixing the defects. However, such collection of feedback is both time-consuming and labor intensive, and the manner in which software developers and end users communicate generally is not intuitive. In particular, to replicate an end user reported defect, the software developer first must imitate the computing environment of the end user and the operation steps performed by the end user as specified by some subjective description of the end user.
It is ironic, as well, that while software patches may correct software defects, the software patch itself may contain one or more defects. Thus, the automatic deployment of a software patch to end users can be risky for machines that require security and reliability. Therefore, it is desirable to selectively and automatically deploy a software patch to user devices to prevent all user devices from being exposed to potential danger caused by a defective software patch.